﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Badge_Manager.View;
using BadgeManager.Controller;
using BadgeManager.Model;

namespace Badge_Manager.Controlli
{
    public partial class ctrlWizard1 : UserControl
    {
        #region "Proprietà Pubbliche"

        #endregion "Proprietà Pubbliche"

        public enum Risultato
        {
            BuonFine,
            Errore,
            CampiNonValidi,
            AttivitaEsistente,
            AttivitaFinita,
            AttivitaIndeterminataAttiva
        }

        private List<Stanza> listaAule;

        public ctrlWizard1()
        {
            InitializeComponent();
            listaAule = new List<Stanza>();
            getAule();
        }

        private bool VerificaEsistente(Corso corso)
        {
            List<Corso> corsi = new ctrlCorso().SelectAll();
            foreach (Corso corsoEsistente in corsi)
            {
                if (corsoEsistente.Equals(corso))
                {
                    return true;
                }
            }
            return false;
        }

        private void getAule()
        {
            listaAule =
                new ctrlStanza().SelectAll();
            cmbElencoAule.DataSource = listaAule;
            if (cmbElencoAule.Items.Count > 0)
                cmbElencoAule.SelectedIndex = 0;
        }

        /// <summary>
        /// Questo metodo memorizza nell'oggetto temporaneo un oggetto Corso
        /// </summary>
        /// <returns></returns>
        public Risultato Memorizza(frmWizard papa)
        {
            #region Controlli TextBox

            if (!optAttIndet.Checked)
            {
                if (string.IsNullOrEmpty(txtCodice.Text))
                {
                    MessageBox.Show("La casella Codice non può essere Vuota", "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    txtCodice.Focus();
                    return Risultato.CampiNonValidi;
                }
                if (string.IsNullOrEmpty(txtNome.Text))
                {
                    MessageBox.Show("La casella Nome non può essere Vuota", "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    txtNome.Focus();
                    return Risultato.CampiNonValidi;
                }
                if (string.IsNullOrEmpty(upNumeroOre.Value.ToString()))
                {
                    MessageBox.Show("La casella Durata Ore non può essere Vuota", "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    upNumeroOre.Focus();
                    return Risultato.CampiNonValidi;
                }
            }

            #endregion Controlli TextBox

            papa.Attivita.Corso.Codice = txtCodice.Text.Trim();
            papa.Attivita.Corso.DataInizio = dtpDataInizio.Value;
            papa.Attivita.Corso.DataInizio = new ctrlAttivitaDettaglio(null)
                .getGiornoDopoValido(dtpDataInizio.Value);
            papa.Attivita.Corso.Nome = txtNome.Text.Trim();
            papa.Attivita.Corso.NumeroOre = Convert.ToInt32(upNumeroOre.Value);

            papa.Attivita.Id = Guid.NewGuid();
            papa.Attivita.Corso = papa.Attivita.Corso;
            papa.Attivita.Stanza = (Stanza)cmbElencoAule.SelectedItem;
            papa.Attivita.Descrizione = txtDescrizioneAttivita.Text;
            if (optAttIndet.Checked)
                papa.Attivita.SenzaFine = true;
            else
                papa.Attivita.SenzaFine = false;

            if (VerificaEsistente(papa.Attivita.Corso))
            {
                MessageBox.Show("Corso esistente", "ATTENZIONE!", MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                return Risultato.Errore;
            }
            AttivitaEsistente tipologia;
            DialogResult result;
            ctrlAttivita cAttivita = new ctrlAttivita(null);
            // controllo se esiste un'attivita presente all'interno della data Aula
            tipologia = cAttivita.VerificaAttivitaEsistente(((Stanza)cmbElencoAule.SelectedValue).Numero);
            // Se esiste ed è ancora in corso
            if (tipologia == AttivitaEsistente.Esistente)
            {
                if (cAttivita.VerificaPossibilitàInserimento(((Stanza)cmbElencoAule.SelectedItem).Numero,
                    (papa.Attivita.Corso)))
                    result = System.Windows.Forms.DialogResult.Yes;
                else
                {
                    MessageBox.Show(@"Impossibile inserire. L'inizio del corso selezionato va in confilitto con il corso presente nella stessa aula.",
                        "Attenzione", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    return Risultato.AttivitaEsistente;
                }
            }
            // se esiste ma è finita avvisa altrimenti se non esiste affatto continua
            else if (tipologia == AttivitaEsistente.AttivitaFinita)
            {
                result = MessageBox.Show("Attività Finita riutilizzare l'Aula ?",
                    "Attenzione", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                return Risultato.AttivitaFinita;
            }
            // se è a tempo indeterminato, avvisa!!
            else if (tipologia == AttivitaEsistente.TempoIndeterminato && optAttIndet.Checked == false)
            {
                result = MessageBox.Show("All'interno di quest aula si svolge un Attività a tempo Indeterminato, continuare comunque ?",
                     "Attenzione", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                return Risultato.AttivitaIndeterminataAttiva;
            }
            return Risultato.BuonFine;
        }

        private void cmdAggAula_Click(object sender, EventArgs e)
        {
            frmAule frm = new frmAule(frmMain.MainRif.User, StatoForm.Nuovo);
            frm.ShowDialog();
        }

        private void optAttIndet_CheckedChanged(object sender, EventArgs e)
        {
            pnlIndeterminato.Enabled = false;
            txtCodice.Text = "";
            txtNome.Text = "";
            pnlCorso.Enabled = false;
            txtDescrizioneAttivita.Text = "Tempo Indeterminato";
        }

        private void optAttDettaglio_CheckedChanged(object sender, EventArgs e)
        {
            pnlIndeterminato.Enabled = true;
            pnlCorso.Enabled = true;
            txtDescrizioneAttivita.Text = "";
        }

        private void upNumeroOre_Validated(object sender, EventArgs e)
        {
            if (upNumeroOre.Value == 0)
                MessageBox.Show("Non puoi creare un corso con zero ore"); return;
        }
    }
}